﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include "SearchBinaryTree.h"
using namespace std;
void test_Insert()
{
	int a[] = { 8, 3, 1, 10, 1, 6, 4, 7, 14, 13 };
	
	key::BSTree<int> b;
	for (auto e : a)
	{
		b.Insert(e);
	}
	b.Inorder();

	b.Find(8);
	b.Find(90);
	
	b.Find(8);

	b.Erase(8);
	b.Inorder();

	b.Erase(3);
	b.Inorder();

	b.Erase(14);
	b.Inorder();

	b.Erase(6);
	b.Inorder();

}
void test_key_value()
{
	key_value::BSTree<string, string> dict;
	//BSTree<string, string> copy = dict;
	dict.Insert("left", "左边");
	dict.Insert("right", "右边");
	dict.Insert("insert", "插入");
	dict.Insert("string", "字符串");

	dict.Inorder();



}

void test_count()
{
	string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉" };
    key_value::BSTree<string, int> countTree;
	 //遍历数组，统计次数
	for (const auto& e : arr)
	{	
	// 先查找水果在不在搜索树中​
		// 1、不在，说明水果第一次出现，则插入<水果, 1>​
		// 2、在，则查找到的结点中水果对应的次数++​
		key_value::BSTNode<string,int>* ret = countTree.Find(e);
		if (ret == nullptr)
		{
			countTree.Insert(e, 1);
		}
		else
		{
			ret->_value++;
		}
	}
	countTree.Inorder();

}

void test_copy()
{
	string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉" };
	key_value::BSTree<string, int> countTree;
	//遍历数组，统计次数
	for (const auto& e : arr)
	{
		// 先查找水果在不在搜索树中​
			// 1、不在，说明水果第一次出现，则插入<水果, 1>​
			// 2、在，则查找到的结点中水果对应的次数++​
		key_value::BSTNode<string, int>* ret = countTree.Find(e);
		if (ret == nullptr)
		{
			countTree.Insert(e, 1);
		}
		else
		{
			ret->_value++;
		}
	}
	cout << "这是countTree的遍历" << endl;
	countTree.Inorder();
	key_value::BSTree<string, int> a(countTree);
	cout << "这是a的遍历" << endl;
	a.Inorder();

}


int main()
{
	//test_key_value();
	//test_Insert();
	test_copy();
	return 0;
}